package com.ht.common.core.context;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 此Holder应用于报文报文解析过程中发生异常时，报文解析类执行时设置回执类型和报文申报平台ID，用于在异常捕获时获得回执报文类型和报文申报平台ID
 * @author zmx
 */
public class MsgErrorHolder
{
    public static final Logger log = LoggerFactory.getLogger(MsgErrorHolder.class);

    /**
     * 使用ThreadLocal维护变量，ThreadLocal为每个使用该变量的线程提供独立的变量副本，
     *  所以每一个线程都可以独立地改变自己的副本，而不会影响其它线程所对应的副本。
     */
    /**
     * 设置报文回执类型
     */
    private static final ThreadLocal<String> MSG_RTYPE = new ThreadLocal<>();
    /**
     * 设置平台申报的PlatId
     */
    private static final ThreadLocal<String> PLAT_DECL_ID = new ThreadLocal<>();

    /**
     * 设置回执报文类型
     */
    public static void setMsgRtype(String msgRType)
    {
        log.info("回执报文类型[{}]设置", msgRType);
        MSG_RTYPE.set(msgRType);
    }

    /**
     * 获得回执报文类型
     */
    public static String getMsgRtype()
    {
        return MSG_RTYPE.get();
    }

    /**
     * 清空回执报文类型
     */
    public static void clearMsgRtype()
    {
    	MSG_RTYPE.remove();
    }
    
    /**
     * 设置回执报文类型
     */
    public static void setPlatDeclId(String platDeclId)
    {
        log.info("回执报文类型[{}]设置", platDeclId);
        PLAT_DECL_ID.set(platDeclId);
    }

    /**
     * 获得回执报文类型
     */
    public static String getPlatDeclId()
    {
        return PLAT_DECL_ID.get();
    }

    /**
     * 清空回执报文类型
     */
    public static void clearPlatDeclId()
    {
    	PLAT_DECL_ID.remove();
    }
    
}
